// 2013-9-15下午12:14:04  net.betou.trade.entity.main.base.BaseConfig.java

package net.betou.trade.entity.main.base;

import java.io.Serializable;
import java.util.Date;

import net.betou.trade.entity.main.AgentAndAdmins;
import net.betou.trade.entity.main.Config;

/**
 * 站点配置
 * 要求：
 * 		1. 系统管理员为默认配置
 * 		2. 机构为机构的配置
 * 		3. 代理商为代理商的配置
 * 		4. 机构下面的管理员为机构的配置
 * 		5. 代理商下面的管理员为代理商的配置
 * ---------------------------------------------
 * 权限控制：
 * 		1. 控制机构和代理商有站点配置的权限
 * ---------------------------------------------
 * 步骤：
 * 		1. 判断是否是机构， justAdmin=false, system=false, agencyOrProxy=true
 * 		2. 判断是否代理商， justAdmin=false, system=false, agencyOrProxy=false
 * 		3. 只要是管理员，只有top_intermedia不为0（这种情况不会出现），就去循环 top_intermedia(倒序)，找到代理商或者机构的时候就停止
 * @author 叶装装
 */
public class BaseConfig implements Serializable{

	public BaseConfig( ){}
	
	private static final long serialVersionUID = 4298995616439278094L;
	private Integer id;
	private String name;	//站点名称
	private String logo; // 站点LOGO
	private String adminTemplate; // 站点后台模板（预留）
	private String frontTemplate; // 前台模板（预留）
	private Date createDate;
	private String createIp;
	private Boolean configDefault; // 是否为系统默认
	
	// many to one , 实际上应该为one to one,
	// 每个管理员可以有一套属于自己的站点配置, 系统管理员为默认配置
	private AgentAndAdmins admin; // 所属管理员
	
	private int hashCode = Integer.MIN_VALUE;

	public Integer getId( ) {
		return id;
	}

	public void setId( Integer id ) {
		this.id = id;
	}

	public String getName( ) {
		return name;
	}

	public void setName( String name ) {
		this.name = name;
	}

	public String getLogo( ) {
		return logo;
	}

	public void setLogo( String logo ) {
		this.logo = logo;
	}

	public String getAdminTemplate( ) {
		return adminTemplate;
	}

	public void setAdminTemplate( String adminTemplate ) {
		this.adminTemplate = adminTemplate;
	}

	public String getFrontTemplate( ) {
		return frontTemplate;
	}

	public void setFrontTemplate( String frontTemplate ) {
		this.frontTemplate = frontTemplate;
	}

	public Date getCreateDate( ) {
		return createDate;
	}

	public void setCreateDate( Date createDate ) {
		this.createDate = createDate;
	}

	public String getCreateIp( ) {
		return createIp;
	}

	public void setCreateIp( String createIp ) {
		this.createIp = createIp;
	}

	public Boolean getConfigDefault( ) {
		return configDefault;
	}

	public void setConfigDefault( Boolean configDefault ) {
		this.configDefault = configDefault;
	}

	public AgentAndAdmins getAdmin( ) {
		return admin;
	}

	public void setAdmin( AgentAndAdmins admin ) {
		this.admin = admin;
	}
	
	public boolean equals( Object obj ) {
		if( null == obj )
			return false;
		if( !( obj instanceof Config ) )
			return false;
		else{
			Config config = ( Config ) obj;
			if( null == this.getId( ) || null == config.getId( ) )
				return false;
			else
				return( this.getId( ).equals( config.getId( ) ) );
		}
	}

	public int hashCode( ) {
		if( Integer.MIN_VALUE == this.hashCode ){
			if( null == this.getId( ) )
				return super.hashCode( );
			else{
				String hashStr = this.getClass( ).getName( ) + ":" + this.getId( ).hashCode( );
				this.hashCode = hashStr.hashCode( );
			}
		}
		return this.hashCode;
	}
}
